.TH std::basic_ios::operatorbool 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::basic_ios::operatorbool \- std::basic_ios::operatorbool

.SH Synopsis
   operator /* unspecified-boolean-type */() const; \fB(1)\fP \fI(until C++11)\fP
   explicit operator bool() const;                  \fB(2)\fP \fI(since C++11)\fP

   Checks whether the stream has no errors.

   1) Returns a value that evaluates to false in a boolean context if fail() returns
   true, otherwise returns a value that evaluates to true in a boolean context.
   2) Returns true if the stream has no errors and is ready for I/O operations.
   Specifically, returns !fail().

   This operator makes it possible to use streams and functions that return references
   to streams as loop conditions, resulting in the idiomatic C++ input loops such as
   while (stream >> value) {...} or while (std::getline(stream, string)) {...}. Such
   loops execute the loop's body only if the input operation succeeded.

.SH Parameters

   \fI(none)\fP

.SH Return value

   1) A value that evaluates to true in a boolean context if the stream has no errors,
   a value that evaluates to false in a boolean context otherwise.
   2) true if the stream has no errors, false otherwise.

.SH Notes

   This conversion can be used in contexts where a bool is expected (e.g. an if
   condition). However, implicit conversions (e.g. to int) that can occur with bool are
   not allowed.

   In C++98, operator bool could not be provided directly due to the safe bool problem.
   The initial solution in C++98 is to provide operator void*, which returns a null
   pointer if fail() returns true or a non-null pointer otherwise. It is replaced by
   the resolution of LWG issue 468, which allows Safe Bool idiom to be applied.

   Since C++11, conversion functions can be explicit. The resolution of LWG issue 1094
   introduced the explicit operator bool and the boolean conversion is now safe.

.SH Example


// Run this code

 #include <iostream>
 #include <sstream>

 int main()
 {
     std::istringstream s("1 2 3 error");
     int n;

     std::cout << std::boolalpha << "s is " << static_cast<bool>(s) << '\\n';
     while (s >> n)
         std::cout << n << '\\n';
     std::cout << "s is " << static_cast<bool>(s) << '\\n';
 }

.SH Output:

 s is true
 1
 2
 3
 s is false

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

     DR    Applied to Behavior as published               Correct behavior
   LWG 468 C++98      operator void* was     a conversion function to an unspecified
                      provided               boolean type is provided instead

.SH See also

   The following table shows the value of basic_ios accessors (good(), fail(), etc.)
   for all possible combinations of ios_base::iostate flags:

        ios_base::iostate flags basic_ios accessors
        eofbit  failbit  badbit good() fail() bad() eof() operator bool operator!
        false   false    false  true   false  false false true          false
        false   false    true   false  true   true  false false         true
        false   true     false  false  true   false false false         true
        false   true     true   false  true   true  false false         true
        true    false    false  false  false  false true  true          false
        true    false    true   false  true   true  true  false         true
        true    true     false  false  true   false true  false         true
        true    true     true   false  true   true  true  false         true
